Java.lang প্যাকেজ একটি প্রাথমিক এবং অপরিহার্য প্যাকেজ যা Java প্রোগ্রামিং ভাষার সবচেয়ে মৌলিক ক্লাসগুলির একটি সেট সরবরাহ করে। এর মধ্যে অন্যতম হল Object ক্লাস, যা সমস্ত ক্লাসের জন্য সুপারক্লাস হিসাবে কাজ করে। Object ক্লাসের কিছু গুরুত্বপূর্ণ মেথড হল equals(), hashCode(), এবং toString()।
এগুলির কাজ এবং ব্যবহার বিস্তারিতভাবে ব্যাখ্যা করা হলো:
1. equals() মেথড:
equals() মেথড দুটি অবজেক্টের সমানতা পরীক্ষা করতে ব্যবহৃত হয়। ডিফল্টভাবে, Object ক্লাসের equals() মেথডটি অবজেক্টের রেফারেন্স ঠিকানার তুলনা করে, অর্থাৎ এটি referential equality যাচাই করে, কিন্তু অনেক সময় এটি কাস্টম ক্লাসে value equality যাচাই করার জন্য ওভাররাইড করা হয়।
ডিফল্ট equals() মেথড:
public boolean equals(Object obj) {
return (this == obj); // Check if both references point to the same object
}
Custom equals() মেথড:
যখন আপনি নিজের equals() মেথড লিখবেন, তখন সাধারণত এই মেথডটি অবজেক্টের value equality যাচাই করবে (অর্থাৎ, অবজেক্টগুলির ভিতরের মান সমান কিনা তা পরীক্ষা করবে)।
উদাহরণ:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.equals(p2)); // true, because both have the same name and age
}
}
2. hashCode() মেথড:
hashCode() মেথড অবজেক্টের একটি unique integer code প্রদান করে যা সাধারণত অবজেক্টের memory address বা অবজেক্টের ভ্যালু অনুযায়ী নির্ধারিত হয়। যদি আপনি equals() মেথডকে কাস্টমাইজ করেন, তবে আপনাকে hashCode() মেথডও কাস্টমাইজ করতে হবে যাতে contract ঠিক থাকে।
hashCode() মেথডের কনট্রাক্ট:
- যদি দুটি অবজেক্ট সমান হয় (যেমন
equals()মেথডে যাচাই করা হয়), তবে তাদেরhashCode()মানও সমান হতে হবে। hashCode()-এর মান কখনও পরিবর্তন করা উচিত নয় (যতক্ষণ অবজেক্টের বৈশিষ্ট্য না বদলানো হয়)।
উদাহরণ:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age); // Generate hashcode based on name and age
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.hashCode() == p2.hashCode()); // true, because hashcodes are equal
}
}
3. toString() মেথড:
toString() মেথড অবজেক্টের string representation প্রদান করে। Object ক্লাসের ডিফল্ট toString() মেথডটি অবজেক্টের memory address প্রদান করে, তবে এটি প্রায়ই কাস্টম ক্লাসে human-readable string আকারে অবজেক্টের মান প্রদর্শন করার জন্য ওভাররাইড করা হয়।
ডিফল্ট toString() মেথড:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Custom toString() মেথড:
কাস্টম ক্লাসে toString() মেথডটি অবজেক্টের প্রাসঙ্গিক মান প্রদর্শন করার জন্য ওভাররাইড করা হয়।
উদাহরণ:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person("John", 25);
System.out.println(p.toString()); // Person{name='John', age=25}
}
}
equals(), hashCode(), এবং toString() এর মধ্যে সম্পর্ক:
equals()এবংhashCode():hashCode()মেথডটিequals()মেথডের সাথে সম্পর্কিত। যদি দুটি অবজেক্ট সমান হয় (যেequals()-এর মাধ্যমে যাচাই করা হয়), তবে তাদেরhashCode()একই হতে হবে।- এই সম্পর্কের মাধ্যমে,
hashCode()মেথডটি Collections (যেমনHashMap,HashSetইত্যাদি) এর মধ্যে দ্রুত সার্চিং, ইনসার্ট এবং ডিলিট অপারেশন পরিচালনা করতে সহায়তা করে।
toString():toString()মেথডটি শুধুমাত্র অবজেক্টের human-readable রূপ সরবরাহ করে। এটি ডিবাগিং, লগিং, এবং প্রদর্শনের জন্য কার্যকর।
equals(): অবজেক্টগুলির মান তুলনা করার জন্য ব্যবহৃত হয়। এটি value equality যাচাই করে।hashCode(): এটি অবজেক্টের ইউনিক আইডেন্টিফায়ার তৈরি করে এবং hashing-based ডেটা structures (যেমনHashMap,HashSet) এর মধ্যে সঠিকভাবে কাজ করতে সাহায্য করে।toString(): অবজেক্টের একটি পাঠযোগ্য string representation প্রদান করে, যা ডিবাগিং বা ইউজার ইন্টারফেসে প্রদর্শনের জন্য উপকারী।
এই তিনটি মেথডই Object ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত, এবং এই মেথডগুলিকে প্রায়শই কাস্টম ক্লাসে ওভাররাইড করা হয় যাতে সঠিক value equality, hashing এবং readable output পাওয়া যায়।
Read more